package com.infore.dataReceiving.util;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;

/**
 * 分页参数封装传递对象
 * @author qiye
 * @date 2018年6月22日 上午10:54:15
 */
public class PageObject implements Serializable {
	private static final long serialVersionUID = -8753809986545361268L;
	/** 排序字段分隔符 */
	public static final String SORD_COLUMNS_SEPARATOR = ",";
	/** 当前页 */
	private Integer pageNumber;
	/** 每页最多能显示的记录数 */
	private Integer pageSize;
	/** 总记录数 */
	private Integer rowCount;
	/** 排序列 */
	String sordColumn;
	/** 排序顺序 */
	String order;
	/**
	 * 上一页的最后一条记录位置 对应:limit startIndex,pageSize;
	 */
	private int startIndex;

	public Integer getPageNumber() {
		return pageNumber;
	}

	public void setPageNumber(Integer pageNumber) {
		
		this.pageNumber = pageNumber;
	}

	public Integer getPageSize() {
		return pageSize;
	}

	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}

	public Integer getRowCount() {
		return rowCount;
	}

	public void setRowCount(Integer rowCount) {
		this.rowCount = rowCount;
	}

	public Integer getPageCount() {
		int pages = rowCount / pageSize;
		if (0 != rowCount % pageSize) {
			pages += 1;
		}
		return pages;
	}

	public Integer getStartIndex() {
		return startIndex;
	}

	public void setStartIndex(Integer startIndex) {
		this.startIndex = startIndex;
	}

	public String getSordColumn() {
		return sordColumn;
	}

	public void setSordColumn(String sordColumn) {
		this.sordColumn = sordColumn;
	}

	public String getOrder() {
		return order;
	}

	public void setOrder(String order) {
		this.order = order;
	}
	/**
	 * 获取排序字段数组
	 * @author qiye
	 * @date 2018年6月21日 上午11:47:57 
	 * @return
	 */
	public List<String> getOrderProperties(){
		List<String> list = new ArrayList<String>();
		if (this.sordColumn != null && !"".equals(this.sordColumn)) {
			String[] columns = this.sordColumn.split(SORD_COLUMNS_SEPARATOR);
			for (String column : columns) {
				list.add(column);
			}
		} 
		return list;
	}
	/**
	 * 获得排序顺序对象
	 * @author qiye
	 * @date 2018年6月21日 下午1:48:21 
	 * @return
	 */
	public Direction getDirection() {
		Direction direction = null;
		if (this.order != null && !"".equals(this.order)) {
			direction = Direction.fromString(order);
		} 
		return direction;
	}
	/**
	 * 获得排序对象
	 * @author qiye
	 * @date 2018年6月21日 下午1:49:39 
	 * @return
	 */
	public Sort getSort() {
		Sort sort = null;
		Direction direction = getDirection();
		List<String> list = getOrderProperties();
		if (direction != null && list.size() > 0) { //排序字段和顺序存在才创建排序
			sort = new Sort(direction, list);
		}
		return sort;
	}
	/**
	 * 获得分页请求参数对象
	 * @author qiye
	 * @date 2018年6月21日 下午2:03:04 
	 * @return
	 */
	public PageRequest getPageRequest() {
		PageRequest pageRequest= null;
		Sort sort = getSort();
		if (sort != null) {
			pageRequest = PageRequest.of(this.pageNumber - 1, this.pageSize, sort);
		} else {
			pageRequest = PageRequest.of(this.pageNumber - 1, this.pageSize);
		}
		return pageRequest;
	}
}
